descape 1.1.3

Adds a single extension trait for &str to unescape any backslashes.
Documentation

GitHub Actions Workflow Status Coverage Documentation MSRV Repository Latest version License unsafe forbidden

Adds a single extension trait for &str to unescape any backslashes. Supports no-std.

Unescaping is designed to support as many languages as possible.

The following escapes are valid:

  • \\n -> \n
  • \\r -> \r
  • \\t -> \t
  • \\b -> \x08
  • \\f -> \x0C
  • \\' -> '
  • \\" -> "
  • \\\\ -> \\
  • \\xNN -> \xNN
  • \\o -> \o
  • \\oo -> \oo
  • \\ooo -> \ooo
  • \\uXXXX -> \u{XXXX}
  • \\u{HEX} -> \u{HEX}

UTF-8 escapes specified by multiple consecutive \xNN escapes will not work as intended, producing mojibake. It's assumed that the escaped data is already UTF-8 encoded.


use alloc::borrow::Cow;
use descape::UnescapeExt;

let escaped = "Hello,\\nworld!".to_unescaped();
assert_eq!(
    escaped,
    Ok(Cow::Owned::<'_, str>("Hello,\nworld!".to_string()))
);

let no_escapes = "No escapes here!".to_unescaped();
assert_eq!(
    no_escapes,
    Ok(Cow::Borrowed("No escapes here!"))
);

//                           v  invalid at index 7
let invalid_escape = "Uh oh! \\xJJ".to_unescaped();
assert_eq!(
    invalid_escape,
    Err(7)
);